package edu.corn.statemachine.core.context;

import edu.corn.statemachine.StateMachineSupport;

public interface IStateContext<S extends Enum<S>, E extends Enum<E>> {

    /**
     * 根据key获取参数。
     *
     * @param key 键。
     * @return 值。
     */
    Object getParam(String key);

    /**
     * 放入键值对
     *
     * @param key   键。
     * @param value 值。
     */
    void putParam(String key, Object value);

    /**
     * 获取事件。
     *
     * @return 事件。
     */
    E getEvent();

    /**
     * 返回对象。
     *
     * @return 调用对象。
     */
    StateMachineSupport<S> getSubject();

    /**
     * 设置对象。
     * @param support
     */
    void putSubject(StateMachineSupport<S> support);
}
